package com.wrial.kind.tree;
/*
 * @Author  Wrial
 * @Date Created in 20:19 2020/8/19
 * @Description 对称的二叉树
 * 请实现一个函数，用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样，那么它是对称的。
 */

public class IsSymmetric {

    /**
     * 思路
     * 1.递归判断左右是否相等
     * 2.可以根据层次遍历，然后判断每一层是否是回文串（对于null使用默认数字代替）
     */
    public boolean isSymmetric(TreeNode root) {
        if (root == null) return true;
        return helper(root.left, root.right);
    }

    private boolean helper(TreeNode left, TreeNode right) {
        if (left == right) return true; //都为null
        if (left == null || right == null) return false;
        if (left.val != right.val) return false;
        return helper(left.right, right.left) && helper(left.left, right.right);
    }


    public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        TreeNode(int x) {
            val = x;
        }
    }
}
